// 提示词分类体系
export const PROMPT_CATEGORIES = [
	{
		key: 'echarts',
		label: 'ECharts图表',
		icon: '📊',
		description: 'ECharts图表库相关的SQL查询模板'
	},
	{
		key: 'g2',
		label: 'G2图表',
		icon: '📈',
		description: 'AntV G2图表库相关的SQL查询模板'
	},
	{
		key: 'analysis',
		label: '数据分析',
		icon: '🔍',
		description: '通用数据分析相关的SQL查询模板'
	},
	{
		key: 'business',
		label: '业务场景',
		icon: '💼',
		description: '常见业务场景的SQL查询模板'
	}
]

// 扩展的图表类型定义
export const CHART_TYPES = {
	// ECharts图表类型
	echarts: [
		{
			value: 'echarts_bar',
			label: '柱状图',
			description: 'ECharts柱状图，适合类别间的数值比较，如不同部门的业绩对比、各月销售额等',
			category: 'echarts'
		},
		{
			value: 'echarts_line',
			label: '折线图',
			description: 'ECharts折线图，适合展示数据趋势变化，如销售额走势、用户增长趋势等',
			category: 'echarts'
		},
		{
			value: 'echarts_pie',
			label: '饼图',
			description: 'ECharts饼图，适合展示数据占比情况，如市场份额、收入构成等',
			category: 'echarts'
		},
		{
			value: 'echarts_scatter',
			label: '散点图',
			description: 'ECharts散点图，适合展示两个变量之间的关系，如价格与销量的关系',
			category: 'echarts'
		},
		{
			value: 'echarts_radar',
			label: '雷达图',
			description: 'ECharts雷达图，适合多维度数据对比，如员工能力评估、产品特性对比',
			category: 'echarts'
		},
		{
			value: 'echarts_heatmap',
			label: '热力图',
			description: 'ECharts热力图，适合展示数据密度分布，如用户活跃时间分布、地理位置热度',
			category: 'echarts'
		}
	],
	// G2图表类型
	g2: [
		{
			value: 'g2_area',
			label: '面积图',
			description: 'G2面积图，适合展示数据的累积变化趋势，如累计销售额、用户增长等',
			category: 'g2'
		},
		{
			value: 'g2_column',
			label: '柱状图',
			description: 'G2柱状图，支持分组、堆叠等多种展示方式',
			category: 'g2'
		},
		{
			value: 'g2_gauge',
			label: '仪表盘',
			description: 'G2仪表盘，适合展示单一指标的完成度，如KPI达成率、进度指标',
			category: 'g2'
		},
		{
			value: 'g2_funnel',
			label: '漏斗图',
			description: 'G2漏斗图，适合展示业务流程中的转化情况，如销售漏斗、用户转化',
			category: 'g2'
		},
		{
			value: 'g2_waterfall',
			label: '瀑布图',
			description: 'G2瀑布图，适合展示数据的逐步变化过程，如利润构成分析',
			category: 'g2'
		}
	],
	// 数据分析类型
	analysis: [
		{
			value: 'ranking',
			label: '排行榜',
			description: '数据排名分析，适合展示TOP N数据，如销售额排名、访问量排名等',
			category: 'analysis'
		},
		{
			value: 'time_series',
			label: '时间序列分析',
			description: '时间序列数据分析，包含趋势、周期性分析',
			category: 'analysis'
		},
		{
			value: 'comparison',
			label: '同比环比分析',
			description: '同比环比数据对比分析，适合业务增长分析',
			category: 'analysis'
		},
		{
			value: 'distribution',
			label: '分布分析',
			description: '数据分布情况分析，如年龄分布、收入分布等',
			category: 'analysis'
		},
		{
			value: 'correlation',
			label: '相关性分析',
			description: '多变量相关性分析，发现数据间的关联关系',
			category: 'analysis'
		}
	],
	// 业务场景类型
	business: [
		{
			value: 'user_behavior',
			label: '用户行为分析',
			description: '用户行为数据分析，如页面访问、操作路径等',
			category: 'business'
		},
		{
			value: 'sales_analysis',
			label: '销售统计分析',
			description: '销售数据统计分析，如销售额、订单量、客户分析等',
			category: 'business'
		},
		{
			value: 'operation_monitor',
			label: '运营监控',
			description: '运营数据监控分析，如系统性能、业务指标监控',
			category: 'business'
		},
		{
			value: 'financial_analysis',
			label: '财务分析',
			description: '财务数据分析，如收入支出、利润分析、成本控制',
			category: 'business'
		},
		{
			value: 'inventory_analysis',
			label: '库存分析',
			description: '库存数据分析，如库存周转、缺货预警、采购建议',
			category: 'business'
		}
	]
}

// 兼容性：保持原有的CHART_TYPES数组格式
export const LEGACY_CHART_TYPES = [
	{
		value: 'ranking',
		label: '排行榜',
		description: '用于展示数据排名情况，适合展示TOP N数据，如销售额排名、访问量排名等'
	},
	{
		value: 'pie',
		label: '饼状图',
		description: '用于展示数据占比情况，适合展示构成比例，如市场份额、收入构成等'
	},
	{
		value: 'bar',
		label: '柱状图',
		description: '用于展示数据对比情况，适合类别间的数值比较，如不同部门的业绩对比、各月销售额等'
	},
	{
		value: 'line',
		label: '折线图',
		description: '用于展示数据趋势变化，适合时间序列数据，如销售额走势、用户增长趋势等'
	}
]

// 生成基础模板
const generateBaseTemplate = (sql, tableMetadata) => {
	return `请根据以下信息，生成适合图表展示的SQL查询语句。请注意以下要点：

**核心要求：**
1. 支持多表关联场景，确保关联条件正确
2. 只选择必要的字段，避免无关字段
3. 添加适当的WHERE条件过滤无效数据
4. 根据图表类型添加合适的GROUP BY、ORDER BY等子句
5. 考虑性能优化，避免全表扫描
6. 严格使用表中实际存在的字段，不要使用不存在的字段名

**公式占位符支持：**
系统支持以下动态公式，可在SQL中直接使用：
- \${current_user_id} - 当前登录用户ID
- \${current_user_name} - 当前登录用户姓名
- \${current_user_dept_id} - 当前登录用户部门ID
- \${current_user_dept_name} - 当前登录用户部门名称
- \${current_date} - 当前日期
- \${current_time} - 当前时间
- \${current_datetime} - 当前日期时间

**原始SQL查询（可作为参考）：**
${sql}

**数据表字段详细信息：**
${tableMetadata
	.map((field) => `- ${field.name}：${field.type}${field.comment ? ` (${field.comment})` : ''}`)
	.join('\n')}

**系统常量说明：**
- DELETE_FLAG字段：值为NOT_DELETE表示有效数据，DELETED表示已删除数据
- 请在查询中添加条件 WHERE DELETE_FLAG = 'NOT_DELETE' 以过滤已删除数据

**数据质量要求：**
- 确保数据完整性，处理NULL值
- 添加合理的数据范围限制
- 考虑数据的时效性和准确性

请生成符合以下格式的SQL查询：
`
}

// 各类型图表的模板生成函数
export const generateChartTemplate = (chartType, { sql, tableMetadata, xField, yField, seriesField }) => {
	const baseTemplate = generateBaseTemplate(sql, tableMetadata)
	let formatExample = ''

	switch (chartType) {
		// ===== ECharts图表类型 =====
		case 'echarts_bar':
			formatExample = seriesField
				? `-- ECharts多系列柱状图数据SQL示例：
/*
 * ECharts多系列柱状图数据要求：
 * 1. category字段：分类名称，显示在x轴（如产品类别、部门等）
 * 2. series_name字段：不同柱子的系列名称（如年份、季度等）
 * 3. value字段：柱子高度，即各系列在各分类的数值
 * 4. 支持数据钻取和交互功能
 * 5. 可添加数据标签和动画效果
 */
SELECT
    \${xField || 'category_field'} as category,  -- 分类名称
    \${seriesField} as series_name,  -- 系列名称
    \${yField || 'value_field'} as value,  -- 数值
    -- 可选：添加用户权限过滤
    CASE WHEN creator_id = \${current_user_id} THEN '我的数据' ELSE '其他数据' END as data_source
FROM (\${sql}) t
WHERE t.DELETE_FLAG = 'NOT_DELETE'
  AND t.create_time >= \${current_date} - INTERVAL 30 DAY  -- 最近30天数据
GROUP BY category, series_name
ORDER BY category, value DESC`
				: `-- ECharts单系列柱状图数据SQL示例：
/*
 * ECharts单系列柱状图数据要求：
 * 1. category字段：分类名称，显示在x轴
 * 2. value字段：柱子高度
 * 3. 支持渐变色和动画效果
 * 4. 可添加数据标签和阈值线
 */
SELECT
    \${xField || 'category_field'} as category,  -- 分类名称
    \${yField || 'value_field'} as value,  -- 数值
    ROUND(\${yField || 'value_field'} * 100.0 / SUM(\${yField || 'value_field'}) OVER(), 2) as percent,  -- 占比
    -- 可选：添加部门过滤
    CASE WHEN dept_id = \${current_user_dept_id} THEN 1 ELSE 0 END as is_my_dept
FROM (\${sql}) t
WHERE t.DELETE_FLAG = 'NOT_DELETE'
  AND t.update_time >= \${current_date} - INTERVAL 7 DAY  -- 最近7天数据
GROUP BY category
ORDER BY value DESC
LIMIT 20`
			return baseTemplate + formatExample

		case 'echarts_line':
			formatExample = seriesField
				? `-- ECharts多系列折线图数据SQL示例：
/*
 * ECharts多系列折线图数据要求：
 * 1. x字段：横轴数据，通常为时间
 * 2. series_name字段：不同折线的系列名称
 * 3. value字段：纵轴数据
 * 4. 支持数据缩放和标记点功能
 * 5. 可添加趋势线和预测数据
 */
SELECT
    DATE_FORMAT(\${xField || 'time_field'}, '%Y-%m-%d') as x,  -- 时间轴
    \${seriesField} as series_name,  -- 系列名称
    \${yField || 'value_field'} as value,  -- 数值
    -- 可选：计算移动平均
    AVG(\${yField || 'value_field'}) OVER (
        PARTITION BY \${seriesField}
        ORDER BY \${xField || 'time_field'}
        ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
    ) as moving_avg
FROM (\${sql}) t
WHERE t.DELETE_FLAG = 'NOT_DELETE'
  AND t.create_user = \${current_user_name}  -- 当前用户创建的数据
  AND \${xField || 'time_field'} >= \${current_date} - INTERVAL 90 DAY  -- 最近90天
GROUP BY x, series_name
ORDER BY x, series_name`
				: `-- ECharts单系列折线图数据SQL示例：
/*
 * ECharts单系列折线图数据要求：
 * 1. x字段：横轴数据，通常为时间
 * 2. value字段：纵轴数据
 * 3. 支持平滑曲线和面积填充
 * 4. 可添加数据点标记和辅助线
 */
SELECT
    DATE_FORMAT(\${xField || 'time_field'}, '%Y-%m-%d') as x,  -- 时间轴
    \${yField || 'value_field'} as value,  -- 数值
    -- 可选：计算同比增长率
    ROUND((
        \${yField || 'value_field'} -
        LAG(\${yField || 'value_field'}, 7) OVER (ORDER BY \${xField || 'time_field'})
    ) * 100.0 / NULLIF(LAG(\${yField || 'value_field'}, 7) OVER (ORDER BY \${xField || 'time_field'}), 0), 2) as week_growth_rate
FROM (\${sql}) t
WHERE t.DELETE_FLAG = 'NOT_DELETE'
  AND t.dept_id = \${current_user_dept_id}  -- 当前用户部门数据
  AND \${xField || 'time_field'} >= \${current_date} - INTERVAL 30 DAY  -- 最近30天
GROUP BY x
ORDER BY x`
			return baseTemplate + formatExample

		case 'echarts_pie':
			formatExample = `-- ECharts饼图数据SQL示例：
/*
 * ECharts饼图数据要求：
 * 1. name字段：饼图各扇区的名称
 * 2. value字段：饼图各扇区的数值
 * 3. 支持环形图和玫瑰图模式
 * 4. 可添加标签线和数据标签
 * 5. 支持图例交互和数据钻取
 */
SELECT
    \${xField || 'name_field'} as name,  -- 分类名称
    \${yField || 'value_field'} as value,  -- 分类数值
    ROUND(\${yField || 'value_field'} * 100.0 / SUM(\${yField || 'value_field'}) OVER(), 2) as percent,  -- 百分比
    -- 可选：添加颜色分组
    CASE
        WHEN \${yField || 'value_field'} >= (SELECT AVG(\${yField || 'value_field'}) FROM (\${sql}) sub WHERE sub.DELETE_FLAG = 'NOT_DELETE')
        THEN 'high'
        ELSE 'normal'
    END as level
FROM (\${sql}) t
WHERE t.DELETE_FLAG = 'NOT_DELETE'
  AND t.create_time >= \${current_date} - INTERVAL 30 DAY  -- 最近30天数据
  AND (t.creator_id = \${current_user_id} OR t.dept_id = \${current_user_dept_id})  -- 权限过滤
GROUP BY name
HAVING value > 0  -- 过滤零值
ORDER BY value DESC
LIMIT 10`
			return baseTemplate + formatExample

		case 'echarts_scatter':
			formatExample = `-- ECharts散点图数据SQL示例：
/*
 * ECharts散点图数据要求：
 * 1. x字段：横轴数值
 * 2. y字段：纵轴数值
 * 3. 可选size字段：气泡大小
 * 4. 可选category字段：分类着色
 * 5. 支持数据刷选和缩放功能
 */
SELECT
    \${xField || 'x_field'} as x,  -- X轴数值
    \${yField || 'y_field'} as y,  -- Y轴数值
    \${seriesField || 'category_field'} as category,  -- 分类
    COUNT(*) as size,  -- 气泡大小
    -- 可选：添加标签信息
    CONCAT(\${seriesField || 'category_field'}, '(', COUNT(*), ')') as label
FROM (\${sql}) t
WHERE t.DELETE_FLAG = 'NOT_DELETE'
  AND t.update_time >= \${current_date} - INTERVAL 7 DAY  -- 最近7天数据
  AND t.dept_id = \${current_user_dept_id}  -- 部门数据
  AND \${xField || 'x_field'} IS NOT NULL
  AND \${yField || 'y_field'} IS NOT NULL
GROUP BY x, y, category
HAVING COUNT(*) >= 1
ORDER BY size DESC
LIMIT 1000`
			return baseTemplate + formatExample

		case 'ranking':
			formatExample = `-- 排行榜数据SQL示例：
/*
 * 排行榜图表数据要求：
 * 1. name字段：显示在排行榜左侧的名称/标题（如产品名、部门名等）
 * 2. value字段：显示在排行榜右侧的数值（如销售额、数量等）
 * 3. 必须包含ORDER BY对value进行降序排序
 * 4. 建议使用LIMIT控制数据量，通常为10条
 * 5. 可选添加rank字段表示排名
 */
SELECT
    ${xField || 'name_field'} as name,  -- 排行项名称，如：产品名称、客户名称等
    ${yField || 'value_field'} as value, -- 排行数值，如：销售额、订单数等
    ROW_NUMBER() OVER (ORDER BY ${yField || 'value_field'} DESC) as rank -- 可选：添加排名
FROM (${sql}) t
WHERE t.DELETE_FLAG = 'NOT_DELETE' -- 确保只查询有效数据
ORDER BY value DESC
LIMIT 10`
			return baseTemplate + formatExample

		case 'pie':
			formatExample = `-- 饼图数据SQL示例：
/*
 * 饼图数据要求：
 * 1. name字段：饼图各扇区的名称（如产品类别、部门等）
 * 2. value字段：饼图各扇区的数值（决定扇区大小）
 * 3. 建议对小数值进行合并处理，避免饼图过于复杂
 * 4. 可选添加percent字段表示百分比
 */
SELECT
    ${xField || 'name_field'} as name,  -- 分类名称，如：产品类别、部门名称等
    ${yField || 'value_field'} as value, -- 分类数值，如：销售额、人数等
    ROUND(${yField || 'value_field'} * 100.0 / SUM(${yField || 'value_field'}) OVER(), 2) as percent -- 可选：计算百分比
FROM (${sql}) t
WHERE t.DELETE_FLAG = 'NOT_DELETE' -- 确保只查询有效数据
ORDER BY value DESC`
			return baseTemplate + formatExample

		case 'line':
			formatExample = seriesField
				? `-- 多系列折线图数据SQL示例：
/*
 * 多系列折线图数据要求：
 * 1. x字段：横轴数据，通常为时间（如日期、月份等）
 * 2. series_name字段：不同折线的系列名称（如产品类别、部门等）
 * 3. value字段：纵轴数据，即各系列在各时间点的数值
 * 4. 必须包含ORDER BY确保数据按x轴和系列排序
 * 5. 建议对时间字段进行适当格式化（如按天、按月等）
 */
SELECT
    DATE_FORMAT(${xField || 'time_field'}, '%Y-%m-%d') as x,  -- 时间轴，如：日期、月份等，可根据需要调整格式
    ${seriesField} as series_name,  -- 系列名称，如：产品类别、部门名称等
    ${yField || 'value_field'} as value  -- 数值，如：销售额、订单数等
FROM (${sql}) t
WHERE t.DELETE_FLAG = 'NOT_DELETE' -- 确保只查询有效数据
GROUP BY x, series_name  -- 根据时间和系列分组统计
ORDER BY x, series_name  -- 确保数据有序`
				: `-- 单系列折线图数据SQL示例：
/*
 * 单系列折线图数据要求：
 * 1. x字段：横轴数据，通常为时间（如日期、月份等）
 * 2. value字段：纵轴数据，即各时间点的数值
 * 3. 必须包含ORDER BY确保数据按x轴排序
 * 4. 建议对时间字段进行适当格式化（如按天、按月等）
 * 5. 可选添加同比/环比增长率
 */
SELECT
    DATE_FORMAT(${xField || 'time_field'}, '%Y-%m-%d') as x,  -- 时间轴，如：日期、月份等，可根据需要调整格式
    ${yField || 'value_field'} as value,  -- 数值，如：销售额、订单数等
    -- 可选：计算环比增长率
    ROUND((${yField || 'value_field'} - LAG(${yField || 'value_field'}) OVER (ORDER BY ${xField || 'time_field'})) * 100.0 /
        NULLIF(LAG(${yField || 'value_field'}) OVER (ORDER BY ${xField || 'time_field'}), 0), 2) as growth_rate
FROM (${sql}) t
WHERE t.DELETE_FLAG = 'NOT_DELETE' -- 确保只查询有效数据
GROUP BY x  -- 根据时间分组统计
ORDER BY x  -- 确保数据按时间排序`
			return baseTemplate + formatExample

		case 'bar':
			formatExample = seriesField
				? `-- 多系列柱状图数据SQL示例：
/*
 * 多系列柱状图数据要求：
 * 1. category字段：分类名称，显示在x轴（如产品类别、部门等）
 * 2. series_name字段：不同柱子的系列名称（如年份、季度等）
 * 3. value字段：柱子高度，即各系列在各分类的数值
 * 4. 必须包含ORDER BY确保数据按category和系列排序
 * 5. 建议控制category数量，避免x轴过于拥挤
 * 6. 可选添加同比/环比分析
 */
SELECT
    ${xField || 'category_field'} as category,  -- 分类名称，如：产品类别、地区名称等
    ${seriesField} as series_name,  -- 系列名称，如：年份、季度等
    ${yField || 'value_field'} as value  -- 数值，如：销售额、数量等
FROM (${sql}) t
WHERE t.DELETE_FLAG = 'NOT_DELETE' -- 确保只查询有效数据
GROUP BY category, series_name  -- 根据分类和系列分组统计
ORDER BY category, series_name  -- 确保数据有序`
				: `-- 单系列柱状图数据SQL示例：
/*
 * 单系列柱状图数据要求：
 * 1. category字段：分类名称，显示在x轴（如产品类别、部门等）
 * 2. value字段：柱子高度，即各分类的数值
 * 3. 必须包含ORDER BY确保数据按category排序
 * 4. 建议控制category数量，避免x轴过于拥挤
 * 5. 可选添加占比字段
 */
SELECT
    ${xField || 'category_field'} as category,  -- 分类名称，如：产品类别、地区名称等
    ${yField || 'value_field'} as value,  -- 数值，如：销售额、数量等
    ROUND(${yField || 'value_field'} * 100.0 / SUM(${yField || 'value_field'}) OVER(), 2) as percent  -- 可选：计算占比
FROM (${sql}) t
WHERE t.DELETE_FLAG = 'NOT_DELETE' -- 确保只查询有效数据
GROUP BY category  -- 根据分类分组统计
ORDER BY value DESC  -- 按数值降序排序，突出重要数据`

			// 返回完整的模板（基础模板 + 格式示例）
			return baseTemplate + formatExample

		// ===== 新增图表类型 =====
		case 'echarts_radar':
			formatExample = `-- ECharts雷达图数据SQL示例：
/*
 * ECharts雷达图数据要求：
 * 1. indicator字段：雷达图各维度名称
 * 2. value字段：各维度的数值
 * 3. name字段：数据系列名称（可选，用于多系列对比）
 * 4. 支持多维度数据对比分析
 */
SELECT
    \${xField || 'indicator_field'} as indicator,  -- 维度名称
    \${yField || 'value_field'} as value,  -- 维度数值
    \${seriesField || 'name_field'} as name,  -- 系列名称（可选）
    -- 可选：标准化数值到0-100范围
    ROUND(\${yField || 'value_field'} * 100.0 / MAX(\${yField || 'value_field'}) OVER(), 2) as normalized_value
FROM (\${sql}) t
WHERE t.DELETE_FLAG = 'NOT_DELETE'
  AND t.dept_id = \${current_user_dept_id}  -- 当前用户部门数据
  AND \${yField || 'value_field'} IS NOT NULL
ORDER BY indicator, name`
			return baseTemplate + formatExample

		case 'time_series':
			formatExample = `-- 时间序列分析SQL示例：
/*
 * 时间序列分析数据要求：
 * 1. time_period字段：时间周期
 * 2. value字段：对应时间的数值
 * 3. 支持趋势分析和周期性检测
 */
SELECT
    DATE_FORMAT(\${xField || 'time_field'}, '%Y-%m-%d') as time_period,
    \${yField || 'value_field'} as value,
    -- 7日移动平均
    AVG(\${yField || 'value_field'}) OVER (
        ORDER BY \${xField || 'time_field'}
        ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
    ) as moving_avg_7d,
    -- 同比增长率
    ROUND((
        \${yField || 'value_field'} -
        LAG(\${yField || 'value_field'}, 365) OVER (ORDER BY \${xField || 'time_field'})
    ) * 100.0 / NULLIF(LAG(\${yField || 'value_field'}, 365) OVER (ORDER BY \${xField || 'time_field'}), 0), 2) as yoy_growth
FROM (\${sql}) t
WHERE t.DELETE_FLAG = 'NOT_DELETE'
  AND t.dept_id = \${current_user_dept_id}
  AND \${xField || 'time_field'} >= \${current_date} - INTERVAL 90 DAY
GROUP BY time_period
ORDER BY time_period`
			return baseTemplate + formatExample

		case 'user_behavior':
			formatExample = `-- 用户行为分析SQL示例：
/*
 * 用户行为分析数据要求：
 * 1. action_type字段：行为类型
 * 2. count字段：行为次数
 * 3. user_count字段：用户数量
 * 4. 支持行为路径和转化分析
 */
SELECT
    \${xField || 'action_type'} as action_type,  -- 行为类型
    COUNT(*) as count,  -- 行为次数
    COUNT(DISTINCT user_id) as user_count,  -- 用户数量
    ROUND(COUNT(*) * 1.0 / COUNT(DISTINCT user_id), 2) as avg_actions_per_user,  -- 人均行为次数
    -- 可选：按时间段分析
    DATE_FORMAT(action_time, '%H') as hour_of_day
FROM (\${sql}) t
WHERE t.DELETE_FLAG = 'NOT_DELETE'
  AND t.action_time >= \${current_date} - INTERVAL 7 DAY  -- 最近7天数据
  AND t.dept_id = \${current_user_dept_id}  -- 当前用户部门数据
GROUP BY action_type, hour_of_day
ORDER BY count DESC`
			return baseTemplate + formatExample

		default:
			return baseTemplate + `\n\n请根据选择的图表类型生成相应的SQL查询语句。`
	}
}
